# __author__ = '庞红亮'
# 通过Python编程完成一个银行ATM机模拟系统，具备如下功能:
# (1)登陆验证：用户输入用户名密码登陆，检测用户名是否存在以及用户名密码是否匹配；
# 用户名密码各有三次输入机会，超过三次系统退出。
# (2)菜单界面：登陆成功后显示功能操作界面，输入序号选择对应功能。
# (3)用户注册：用户可以输入用户名和密码创建自己的账号，并输入电话号码等信息，
# 如果用户名存在则让用户重新输入用户名。注册后免费赠送5000元余额。
# (4)账户管理：用户可以随时查看自己的账户余额。用户可以输入其他账户用户名，
# 实现转账功能；用户名必须存在。用户也可以模拟实现存取款功能。
# (5)管理员的用户名和密码可以预先初始化。
import time
user={'张三':['123456','13438338027','5000'],'李四':['123456','13438338027','5000']}
admin={'张三':'123456'}
def register():
    print('欢迎进入注册界面')
    while True:
        userN=input('请输入你的用户名：')
        if userN not in user:
            print('恭喜你输入的用户名可以用')
            pwd=input('请输入你的密码：')
            phoneNum=input('请输入你的电话号码：')
            banlance=5000
            user[userN]=[pwd,phoneNum,banlance]
            print('注册成功')
            print('即将进入登录后的界面')
            time.sleep(2)
            print('{}登录成功'.format(userN))
            login_Menu(userN)
            break
            # return userN
        else:
            print('你输入的用户名已经存在，请重新输入')
def login():
    print('***'*10)
    print('-----欢迎进入ATM系统登录界面-----')
    print('***'*10)
    for i in range(3):
        username=input('请输入用户名:')
        if username  in  user:
            for j in range(3):
                password=input('请输入该用户的密码:')
                if password ==user[username][0]:
                    print('欢迎进入XXXATM系统')
                    # print('你卡上的余额为：{}'.format(user[username][2]))
                    return username,password
            else:
                print('你已经三次输入错误的密码,将退出系统')
                return
    else:
        print('你已经三次输入用户名错误,将退出系统')
        return
        # print('你已经输错了三次用户名将推出系统')
# def menu(user,pwd):
#     print('欢迎{}登录成功，欢迎查看商品菜单'.format(user))

def checkUserOrPwd(fn):
    def wrapper(username,pwd):
        if username in user:
            if pwd==user[username][0]:
                fn(username,pwd)
            else:
                print('你的身份认证不通过')
    return wrapper
# @checkUserOrPwd  #selctBalance=checkUserOrPwd(selectBalance)=>selctBalance=wrapper
def selectBalance(username,pwd):
    print('你卡上的余额为：{}'.format(user[username][2]))
# @checkUserOrPwd
def accoutManage(username):
    print('请选择存款，还是取款')
    print('1:存款','2:取款','3:转账')
    inp=int(input('请输入：'))
    if inp==1:
        addMon=int(input('请输入你存款的金额：'))
        # print(user[username])
        print('你的账户存款后的余额为:{}'.format(int(user[username][2])+addMon))
        # return username,int(user[username][2])+addMon
        user[username][2]=int(user[username][2])+addMon
        print('即将进入即将进入登录后的界面')
        time.sleep(2)
        login_Menu(username)
    if inp==2:
        subMon=int(input('请输入你取款的金额：'))
        print('你的账户取款后的余额为:{}'.format(int(user[username][2])-subMon))
        user[username][2]=int(user[username][2])-subMon
        # return username,int(user[username][2])-subMon
        print('即将进入即将进入登录后的界面')
        time.sleep(2)
        login_Menu(username)
    if inp==3:
        while 1:
            zUser=input('请输入转账的人的姓名：')
            if zUser in user:
                monTrafer=int(input('请输入转账的金额:'))
                user[username][2]=int(user[username][2])-monTrafer
                user[zUser][2]=int(user[zUser][2])+monTrafer
                print('转账后的金额为：{}'.format(user[username][2]))
                print('{}的卡里余额为:{}'.format(zUser,user[zUser][2]))
                # return username,user[username][2]
                print('即将进入即将进入登录后的界面')
                time.sleep(2)
                login_Menu(username)
            else:print('没有查询到该人员信息')
def quit(username):
    print('即将退出系统')
    time.sleep(2)
    if username in user:
        return
# accoutManage('张三','123456')
def adminManage(username):
    if username in admin:
        print('欢迎进入管理员管理界面，内容待完善')
    else:
        print('你不是管理员账户')
        time.sleep(2)
        login_Menu(username)
def init_menu():
    print('欢迎进入ATM管理系统')
    print('1:注册'+'     *******      '+'2:登录')
    inp=int(input('请选择要进入的菜单:'))
    # print(inp)
    if inp==1:
        print(123)
        register()
    elif inp==2:
        username,pwd=login()
        print('即将进入登录后的界面')
        time.sleep(2)
        print('{}登录成功'.format(username))
        login_Menu(username)
            # return userN
def login_Menu(username):
    print('*'*5+'界面如下'+'*'*5)
    print('3:账户余额管理'+'     *******      '+'4:管理员界面')
    print('5:退出当前系统')
    inp=int(input('请输入需要进入界面:'))
    if inp==3:
        accoutManage(username)
    elif inp==4:
        adminManage(username)
    elif inp==5:
        quit(username)

init_menu()

# atm 是第三周作业，你放反了，checkUserOrPwd 这个装饰器可以再看看


